export class Stack {
  items = []
  constructor () {}

  //添加一个新元素到栈顶
  push (element) {
    this.items.push(element)
  }
  //移除栈顶的元素，并返回被移除的元素
  pop () {
    return this.items.pop()
  }
  //返回栈顶的元素，不对栈做任何修改（这个方法不会移除栈顶的元素，仅仅返回它）
  peek () {
    if (this.isEmpty()) return null
    return this.items[this.items.length - 1]
  }
  //如何栈里没有任何元素就返回true，否则返回false
  isEmpty () {
    return this.items.length === 0
  }
  //返回栈里的元素个数，这个方法和数组的length属性很类似
  size () {
    return this.items.length
  }
}

export function dec2bin(num) {
  
  const stack = new Stack()

  while (num > 0) {
    let remainder = num % 2
    num = Math.floor(num / 2)
    stack.push(remainder)
  }

  let binString = ''
  while (!stack.isEmpty()) {
    binString += stack.pop()
  }

  return binString
}